package com.alan.android.sqlite;

import java.util.List;

/**
 * 数据库操作接口，定义了对数据库进行增删查改的基本方法
 */
public interface IDatatabseOpertion {

    /**
     * 查询数据库，并将结果映射为指定类的对象
     *
     * @param sqls 查询的SQL语句
     * @param clazz 结果映射的类类型
     * @param <T> 泛型参数，表示查询结果的类型
     * @return 单个查询结果对象，如果查询不到结果，可能返回null
     */
    <T> T query(String sqls, Class<T> clazz);

    /**
     * 查询数据库，并将结果映射为指定类的列表
     *
     * @param sql 查询的SQL语句
     * @param clazz 结果映射的类类型
     * @param <T> 泛型参数，表示查询结果列表中每个元素的类型
     * @return 查询结果列表，如果查询不到结果，返回空列表
     */
    <T> List<T> queryList(String sql, Class<T> clazz);

    /**
     * 向数据库中插入一条记录
     *
     * @param o 要插入的记录对象
     * @return 插入是否成功
     */
    boolean insert(Object o);

    /**
     * 替换数据库中的一条记录如果不存在则插入
     *
     * @param o 要替换或插入的记录对象
     * @return 替换或插入是否成功
     */
    boolean replace(Object o);

    /**
     * 从数据库中删除一条记录
     *
     * @param o 要删除的记录对象
     */
    boolean delete(Object o);

    void execute(String sql);

}
